﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using STS.Model;
using System;

namespace STS.ViewModel
{
    public class BadaniaKrewViewModel : BaseViewModel
    {
        private ObservableCollection<BadaniaKrew> _badaniaKrewItems;
        public ObservableCollection<BadaniaKrew> BadaniaKrewItems
        {
            get
            {
                if (_badaniaKrewItems == null)
                {
                    _badaniaKrewItems = new ObservableCollection<BadaniaKrew>();
                }
                return _badaniaKrewItems;
            }
            set
            {
                _badaniaKrewItems = value;
                NotifyPropertyChanged("BadaniaKrewItems");
            }
        }

        public void FindBadaniaKrewItems()
        {
            var badaniaKrewDB = from badaniaKrew in ModelInstance.DataContext.BadaniaKrewItems
                                select badaniaKrew;
            BadaniaKrewItems = new ObservableCollection<BadaniaKrew>(badaniaKrewDB);
            Debug.WriteLine("Znalazłem BadaniaKrew, size = " + BadaniaKrewItems.Count);
        }

        public BadaniaKrew FindBadaniaKrewByIdBadaniaKrew(int badaniaKrewId)
        {
            var badaniaKrewDB = from badaniaKrew in ModelInstance.DataContext.BadaniaKrewItems
                                where badaniaKrew.IdKrew == badaniaKrewId
                                select badaniaKrew;
            return badaniaKrewDB.SingleOrDefault<BadaniaKrew>();
        }

        public void UpdateBadaniaKrew(BadaniaKrew updateBadaniaKrew)
        {
            BadaniaKrew old = FindBadaniaKrewByIdBadaniaKrew(updateBadaniaKrew.IdKrew);
            SetEntityPropertities(ref old, updateBadaniaKrew);
            SaveChangesToDB();
        }

        public void AddBadaniaKrew(BadaniaKrew badaniaKrew)
        {
            RemoveAllBadaniaKrew();

            ModelInstance.DataContext.BadaniaKrewItems.InsertOnSubmit(badaniaKrew);
            SaveChangesToDB();
            BadaniaKrewItems.Add(badaniaKrew);

        }

        public void RemoveBadaniaKrew(BadaniaKrew badaniaKrew)
        {
            BadaniaKrewItems.Remove(badaniaKrew);
            ModelInstance.DataContext.BadaniaKrewItems.DeleteOnSubmit(badaniaKrew);
            SaveChangesToDB();
        }

        public void RemoveAllBadaniaKrew()
        {
            var badaniaKrewDB = from badaniaKrew in ModelInstance.DataContext.BadaniaKrewItems
                                select badaniaKrew;

            foreach (BadaniaKrew _badaniaKrew in badaniaKrewDB)
            {
                ModelInstance.DataContext.BadaniaKrewItems.DeleteOnSubmit(_badaniaKrew);
            }

            try
            {
                SaveChangesToDB();
                BadaniaKrewItems.Clear();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }
        }

    }
}
